package com.enjoyor.soa.traffic.api.service.dubbo.sms;

import java.util.List;

/**
 * 
 */

import com.enjoyor.soa.traffic.util.pojo.ResultPojo;

/**
 * 海信信号机操作接口
 * @author ly
 *
 */
public interface DubboCrossControlService {

	/**
	 * 
	 * @Title: TSCCmd
	 * @Description: 控制命令
	 * @param ObjName
	 * @param crossId
	 * @param NO
	 * @return
	 * @return: ResultPojo
	 */
	public ResultPojo TSCCmd(String ObjName, String crossId, String NO);

	
	/**
	 * 订阅消息
	 * @param type 订阅类型 
	 * @param Spot：控制点编号。编号与数据库中的静态数据保持一致。
	 * @param SubType：订阅的消息类型。值与XML数据包的消息类型保持一致。	
	 * @return
	 */
	public ResultPojo subscribeSpotMessage(String crossId);
	/**
	 * 取消消息
	 * @param type 订阅类型 
	 * @param Spot：控制点编号。编号与数据库中的静态数据保持一致。
	 * @param SubType：订阅的消息类型。值与XML数据包的消息类型保持一致。	
	 * @return
	 */
	public ResultPojo cancelSpotMessage( String crossId);
	
	/**
	 * 控制点的联机状态
	 * @param spot 控制点编号。编号与数据库中的静态数据保持一致
	 * @return
	 */
	public ResultPojo getSpotStatus(String crossId);
	
	/**
	 * 相位状态
	 * @param spot 控制点编号。编号与数据库中的静态数据保持一致
	 * @return
	 */
	public ResultPojo getSpotPhasesStatus(String crossId);
	
	/**
	 * 单元状态
	 * @param spot 控制点编号。编号与数据库中的静态数据保持一致
	 * @return
	 */
	public ResultPojo getSpotUnitStatus(String crossId);
	
	/**
	 * 协调状态
	 * @param spot 控制点编号。编号与数据库中的静态数据保持一致
	 * @return
	 * 
	 */
	public ResultPojo getSpotCoordStatus(String crossId);
	
	/**
	 * 
	 * @Title: getSpotCycle
	 * @Description: 路口周期
	 * @param spot
	 * @return
	 * @return: ResultPojo
	 */
	public ResultPojo getSpotCycle(String crossId);
	
	/**
	 * 改变控制方式
	 * @param Spot：控制点编号。编号与数据库中的静态数据保持一致。
	 * @param Pattern：指定运行的方案。值的定义与“协调状态”的“CoordPatternStatus”字段相同
	 */
	public ResultPojo changeSpotPattern(String crossId, String pattern);
	
	/**
	 * 改变相位状态
	 * @param Spot：控制点编号。编号与数据库中的静态数据保持一致。
	 * @param cdirection 方向
	 * @param lfd 该条车道的车流转向属性
	 */
	public ResultPojo changeSpotPhase(String crossId, String cdirection, String lfd,
			String type, String startTime, String duration);
	/**
	 * 改变相位状态
	 * @param Spot：控制点编号。编号与数据库中的静态数据保持一致。
	 * @param phaseIds 相位编号列表
	 */
	public ResultPojo changeSpotPhaseByPids(String spotId, List<String> phaseIds);
	/**
	 * 
	 * @Title: restoreSpotPhaseByPids
	 * @Description: 还原修改的相位状态
	 * @param spotId 控制点编号。编号与数据库中的静态数据保持一致。
	 * @param phaseIds 相位编号列表
	 * @return
	 * @return: ResultPojo
	 */
	public ResultPojo restoreSpotPhaseByPids(String spotId, List<String> phaseIds);
	/**
	 * 
	 * @Title: unlockSpotPhase
	 * @Description: 解锁相位状态
	 * @param Spot：控制点编号。编号与数据库中的静态数据保持一致。
	 * @param cdirection 方向
	 * @param lfd 该条车道的车流转向属性
	 * @return
	 * @return: ResultPojo
	 */
	public ResultPojo unlockSpotPhase(String spotId, String cdirection, String lfd, String type);
	/**
	 * 故障日志
	 * Spot：控制点编号。编号与数据库中的静态数据保持一致。
	 * @param EventTime：信号机日志时间，格式为：。
	 * @param EventLogID：信号机日志类型ID
	 */
	public ResultPojo getSpotErrorLog(String crossId,String eventTime, String eventLogID);
	
	/**
	 * 对时请求
	 * @param Spot：控制点编号。编号与数据库中的静态数据保持一致。
	 * @param AutoTime：对时时间，，保留使用（目前不能通过时间对时），只能发送对时命令，通过通信机对时
	 */
	public ResultPojo synSpotTime(String crossId, String autoTime);
	
	/**
	 * 步进控制
	 * @param  Spot：控制点编号。编号与数据库中的静态数据保持一致。
	 * @param Command：控制命令。	1 - 开始步进。0 - 取消步进
	 * @param CtrlStep： 步进幅度 	0 - 表示顺序步进，1～16选择步进
	 */
	public ResultPojo spotCtrlStep(String crossId, String command, String ctrlStep);
	
	/**
	 * 跟随相位状态
	 * @param  Spot：控制点编号。编号与数据库中的静态数据保持一致。
	 */
	public ResultPojo getSpotOverlap(String crossId);
	
	/**
	 * 故障状态
	 * @param  Spot：控制点编号。编号与数据库中的静态数据保持一致。
	 */
	public ResultPojo getSpotErrorStatus(String crossId);
	
	/**
	 * 通道勤务
	 * @param  Spot：控制点编号。编号与数据库中的静态数据保持一致。
	 * @param cdirection 方向
	 * @param lfd 该条车道的车流转向属性
	 */
	public ResultPojo getSpotChannelDuty(String crossId, String cdirection, String lfd);
	
	/**
	 * 
	 * @Title: getCrossPlan
	 * @Description: 获取指令控制方案
	 * @param spotId
	 * @param planNo
	 * @return
	 * @return: ResultPojo
	 */
	public ResultPojo getCrossPlan(String crossId,String planNo, String delayTime);
}
